草庐IT

Java Swingworker 和多线程

全部标签

c++ - V8 目前是线程安全的吗?

当我意识到我错过了一个重要的点:并发时,我最终选择了v8作为我的应用程序的脚本引擎。由于几个关键因素,我决定使用v8而不是lua,但显然我不能使用v8编写线程安全代码或一般的多线程任务。在官方文档中我没有找到v8的并发特性的引用,他们描述了GC,v8是用C++编写的,它支持很多平台等等,但是在wiki和在C++应用程序中嵌入v8的官方文档。问题:我应该如何考虑v8?我必须直接从C++将我的应用程序公开为一组单线程/线程安全函数吗? 最佳答案 V8不是线程安全的,但这并不意味着您不能在线程环境中使用它。这样做的唯一规定是使用V8的Lo

C++ 11 - 当我将局部变量作为参数传递给线程时是否安全

我有这个代码#includetypedefstruct{inta;shortb;}TestStruct;voidTestParamRef(constTestStruct&test){Sleep(3000);/*Sleeptowaitforthecallerfunctionend*/TestStructi=test;/*Testiftheargument'sstillok*/}voidTestParamPointer(TestStruct*test){Sleep(4000);/*Sleeptowaitforthecallerfunctionend*/TestStructi=*test;/

c++ - C/C++ 中的非线程安全文件 I/O

在解决我们应用程序中的一些性能问题时,我发现C的stdio.h函数(至少对于我们的供应商而言,C++的fstream类)是线程安全的.结果,每次我做像fgetc这样简单的事情时,RTL都必须获取一个锁,读取一个字节,然后释放锁。这对性能不利。在C和C++中获得非线程安全文件I/O的最佳方法是什么,以便我可以自行管理锁定并获得更好的性能?MSVC提供_fputc_nolock,GCC提供unlocked_stdio和flockfile,但我在我的编译器(CodeGearC++Builder)中找不到任何类似的函数。我可以使用原始WindowsAPI,但它不可移植,而且我认为对于一次一个字

c++ - 从多个线程调用 WSAStartup() 会导致死锁吗?

我正在开发一个应用程序,它有一个TCP服务器和多个UDP服务器/监听器。每个服务器都是一个单独的线程,与建立TCP连接的工作线程相同。我在每个线程中调用WSAStartup()。有时,调用WSAStartup()会挂起(对我来说这看起来像是一个死锁)。这是堆栈跟踪:ntdll.dll!_KiFastSystemCallRet@0()ntdll.dll!_ZwWaitForSingleObject@12()+0xcbytesntdll.dll!_RtlpWaitForCriticalSection@4()+0x8cbytesntdll.dll!_RtlEnterCriticalSecti

c++ - CUDA 初学者 - 在继续之前强制等待线程完成

我正在学习CUDA,目前我有类似的东西。__device__voiditerate_temperatures(intfieldSize,Atom*atoms){inttemperature=threadIdx.x+blockDim.x*blockIdx.x;nAtoms=pow(fieldSize,DIMENSION);iterate_atoms>>(atoms,nAtoms,temperature);}问题是,每个温度都需要最后一个的结果。我怎样才能强制每个block等待最后一个。谢谢! 最佳答案 只要调用__syncthread

c++ - 使用 JNI (C++) 从 native 线程调用 Java 方法时出现问题

我有一个JNI问题,希望有人能帮我解决。我正在尝试从native线程调用名为LUSOutputJNI的Java类的构造函数。它在这个特定类的FindClass(...)上一直失败。代码如下:LOGE("1");JNIEnv*env=NULL;LOGE("2");intres=-1;res=g_vm->AttachCurrentThread(&env,NULL);if(env==NULL){LOGE("envisNULL,AttachCurrentThreadfailed");;}if(res>=0)LOGE("AttachCurrentThreadwassuccessful");jcl

c++ - 在 MacOSX Lion 上编译 gcc 4.6.1 C++0x 线程代码时出错

编译以下代码时:#include#includeusingnamespacestd;voidhello(){cout使用:$g++-4.6.1-std=c++0x-pthreadthreading.cpp我收到以下错误:threading.cc:Infunction‘intmain()’:threading.cc:13:2:error:‘thread’wasnotdeclaredinthisscopethreading.cc:13:9:error:expected‘;’before‘t’threading.cc:14:2:error:‘t’wasnotdeclaredinthissco

c++ - C++ 的线程安全和引用传递

我想确认我对C++中的线程和引用传递的理解。以下函数线程安全吗?QStringsA="hello";QStringsB="world";boolsomeFlag=AreStringsEqual(sA,sB);...boolAreStringsEqual(QStringconst&stringA,QStringconst&stringB){if(stringA==stringB){returntrue;}returnfalse;}我认为它是线程安全的。如果有人可以确认我的思维过程,或者告诉我我不知道我在说什么,我会很高兴:)进程内存中有sA和sB的两个拷贝。一组在Thread1的堆栈上创

c++ - 特定于线程的数据——为什么我不能只使用带有线程 ID 的静态映射?

在阅读POSIX线程时,我遇到了一个线程特定数据的示例。我确实有一个困惑的地方......线程特定的数据接口(interface)看起来有点笨拙,尤其是当你混合使用pthread_once、各种初始化程序等时。有什么理由我不能只使用静态std::map,其中键是pthread_self()id,数据值保存在std::pair的第二部分?我想不出只要它被包裹在互斥量中就无法工作的原因,但我没有看到任何关于它的建议或任何类似的东西让我感到困惑,因为它听起来比提供的API容易得多。我知道线程可能有很多catch-22,所以我想我会问一下,看看我是否要介入……一些不愉快的事情?:)

c++ - BOOST 线程 : cout behavior

我是Boost线程的新手,我对如何从多个线程执行输出感到困惑。我有一个简单的boost::thread从9倒数到1;主线程等待然后打印“LiftOff..!!”#include#includeusingnamespacestd;structcallable{voidoperator()();};voidcallable::operator()(){inti=10;while(--i>0){cout问题是我必须在线程中使用明确的“cout.flush()”语句来显示输出。如果我不使用flush(),我只会得到“LiftOff!!”作为输出。有人可以告诉我为什么我需要显式使用flush()